//
//  HomeModelViewModel.swift
//  微博01
//
//  Created by 牛威 on 15/12/11.
//  Copyright © 2015年 牛威. All rights reserved.
//

import Foundation
import SDWebImage
class HomeModelViewModel {
    
    
    //懒加载数据数组
    
    lazy var arrayM = [HMViewModel]()
    
    
    //这里的上拉刷同样也是增加一个外部参数 方便调用
    func loadHomeModelData(isPullup isPullup:Bool,finished:(isSuccessed:Bool)->()){
        
        //把数组 模型里的第一条微博数据的id赋值给 since_id
        
        let since_id = isPullup ? 0 : (arrayM.first?.homeModel.id ?? 0)
        let max_id = isPullup ? (arrayM.last?.homeModel.id ?? 0) : 0
        
        StatusDAL.loadStatus(since_id, max_id: max_id) { (array) -> () in
            
            guard let array = array else {
            
                finished(isSuccessed: false)
                
                return 
            
            }
            
            
            
            // 创建一个可变的数组 进行字典转模型
            
            var arrayM = [HMViewModel]()
            
            
            
            //  遍历数组字典 并字典转模型
            
            for dict in array {

                arrayM.append(HMViewModel(homeModel: NWHomeModel(dict: dict)))

            }
            
            print("刷新了\(arrayM.count)条数据")
            
            //拼接数组 (这个是做刷新的关键代码!!!!!!) 新加的数据放在前面,原有的放到后面 这样每次刷新到的新数据就可以,赋值给了since_id
            
            if max_id > 0 {
            
              self.arrayM += arrayM //拼接到数组后面 新浪官方的微博数组都是倒序 最新的在前面 这点要记住
            
            
            }else {
            
                self.arrayM = arrayM + self.arrayM //拼接到数组前面
            }
            
            
//            print(self.arrayM) //这里想要打印数据 就得遵守一个协议兵重写 description方法-->HMViewmodel文件中去
            
            
            //成功回调--->通知控制器刷新表格
            
//            finished(isSuccessed: true)
            
            //缓存单张图片 --->我们应该在刷新表格之前,缓存单张图片,进行布局-->添加一个闭包
            
            self.cacheSingleImage(arrayM,finished: finished)
        }
        
        
        
    }
    
    private func cacheSingleImage(arrayM : [HMViewModel],finished:(isSuccessed:Bool)->()){
    
      //遍历视图模型数组
        
        let group = dispatch_group_create()
        
        //计算图片的长度
        
        var imageLength = 0
        
        for vm in arrayM {
            
            if vm.thumbnailUrls?.count != 1 {
            
              continue
            }
        
            
            let url = vm.thumbnailUrls![0]
            
//            print("开始缓存")
            
            //入组
            
            dispatch_group_enter(group)
        
          //下载图片 sd的核心下载函数,如果本地缓存已经存在,同样会通过完成回调返回
            
            
            SDWebImageManager.sharedManager().downloadImageWithURL(url,
                options: [],
                progress: nil,
                completed: { (image, _, _, _, _) -> Void in
                    
                    if let img = image,
                        
                        let data = UIImagePNGRepresentation(img) {
                    
                      imageLength += data.length
                    
                    }
                    
//                 print("下载图片")
                dispatch_group_leave(group)
            })
        }
    
       //监听调度完成
        
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            
//            print("缓存完成---\(imageLength/1024)k")
            
            //完成回到,控制器才刷新表格
            finished(isSuccessed: true)
        }
    
    }
    
    
}
